博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 发送内嵌图片的邮件 遇到的问题
阅读量:5817 次
发布时间:2019-06-18

本文共 3955 字,大约阅读时间需要 13 分钟。

问题1:spring 发送带图片的html格式的邮件?

解决方法1:直接在发送内容里面添加  

  这种方法是最简单的发送带图片的邮件的方法,但是存在一个问题:有的邮箱会把邮件中有带服务器地址的图片放到垃圾箱,导致邮件收不到,于是继续整。

解决方法2:使用Spring带的 MimeMessageHelper,说不清楚直接看代码:

1 public class MyClass { 2  3     public static void sendHtmlImgEmail(String subject, String sendHtml, String toUser, String ccUser, String bccUser, 4             File[] attachment) { 5         try { 6             //【1】 7             sendHtml = sendHtml + "

"; 8 JavaMailSenderImpl senderImpl = new JavaMailSenderImpl(); 9 // 设定mail server【2】10 int port = 25;11 senderImpl.setHost("邮箱host");12 senderImpl.setPort(port);13 14 // 建立邮件消息,发送简单邮件和html邮件的区别15 MimeMessage mailMessage = senderImpl.createMimeMessage();16 // 注意这里的boolean,等于真的时候才能嵌套图片,在构建MimeMessageHelper时候,所给定的值是true表示启用multipart模式17 // 最后一个参数“utf-8”避免邮件中文乱码 问题【3】18 MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, true, "utf-8");19 20 // 设置多个抄送地址21 if (null != ccUser && !ccUser.isEmpty()) {22 @SuppressWarnings("static-access")23 InternetAddress[] internetAddressCC = new InternetAddress().parse(ccUser);24 messageHelper.setCc(internetAddressCC);25 }26 // 设置多个密送地址27 if (null != bccUser && !bccUser.isEmpty()) {28 @SuppressWarnings("static-access")29 InternetAddress[] internetAddressBCC = new InternetAddress().parse(bccUser);30 messageHelper.setBcc(internetAddressBCC);31 }32 // 添加附件的内容33 if (null != attachment && attachment.length != 0) {34 for (File file : attachment) {35 DataSource source = new FileDataSource(file);36 messageHelper.addAttachment(file.getName(), source);37 }38 }39 if (null != toUser && !toUser.isEmpty()) {40 //这里的分隔符可以自定义 发送给多人【4】41 String[] toUsers = toUser.split(",");42 messageHelper.setTo(toUsers);43 }44 // 设置收件人,寄件人45 messageHelper.setFrom("发件人名称");46 messageHelper.setSubject(subject);47 // true 表示启动HTML格式的邮件48 messageHelper.setText(sendHtml, true);49 50 //这个 直接在main方法中可以 但是部署后就不行了 报错 找不到路径【5】51 //String imagePath="src/main/resources/config/emailTag.png";52 53 //这个获取项目的完整路径【6】54 String abPath = new MyClass().getClass().getClassLoader().getResource("/").getPath();55 56 String imagePath=abPath+"config/emailTag.png";57 58 FileSystemResource img = new FileSystemResource(imagePath);59 60 //这个是图片的标识 对应上面image标签中的cid【7】61 messageHelper.addInline("imprtant", img);62 senderImpl.setUsername("邮箱用户名");63 senderImpl.setPassword("你的邮箱密码");64 Properties prop = new Properties();65 //这个使用outlook 发邮件时候 必须添加 否则报错那个 ,,,忘了【8】66 prop.put("mail.smtp.starttls.enable", "true");67 senderImpl.setJavaMailProperties(prop);68 // 发送邮件69 senderImpl.send(mailMessage);70 System.out.println("邮件发送成功!");71 } catch (Exception e) {72 e.printStackTrace();73 } 74 }75 }

解释:

【1】:注意 cid 这个参数  指图片的标识,看【7】,必须相同

【2】:设置邮件服务器地址跟端口号  注意outlook端口号是 587

【3】:发送中文乱码,添加编码格式 utf-8

【4】:邮件发送给多人

【5】:这个在部署后 找不到路径  有知道的大侠 求赐教

【6】:这个我看了下项目部署在载服务器上的路径,然后想到这个方法获取到绝对路径在加上自己图片在的路径 成功(这个 折腾了好久,一直找不到路径)

【7】:对应【1】

【8】:这个 使用微软邮箱的时候 报错 ,com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM

    添加这个属性后就可以

 

总结:

 这个发送邮件方法,可以带附件,发送多个人,添加内嵌图片,Html内容,添加附件未测试,其他都测试通过,但是如果不设置【1】【7】,图片会自动变成附件发送。

转载于:https://www.cnblogs.com/xululublog/p/7800194.html

你可能感兴趣的文章
es6 promise 前凑
查看>>
AVR中的 JTAG & USART 不兼容~~~害我搞得这么晚!!!
查看>>
将浏览器地址栏中的 Request 参数显示成中文
查看>>
利用css布局效果图
查看>>
ElasticSearch 集群健康
查看>>
Solr6.6.0 用 SimplePostTool索引文件的启示
查看>>
谈谈跨多系统的项目测试
查看>>
Oracle 计算两个时间的差值
查看>>
Delegate,Action,Func,匿名方法,匿名委托,事件
查看>>
微信小店开发(2) DIY货架
查看>>
性能测试分析-之系统端口不够用
查看>>
IO测试工具之fio详解
查看>>
Diamond Collector (动态规划)
查看>>
ASP.NET Core MVC I/O编程模型
查看>>
写一个dos批处理文件-更新svn,删除以前的内容,复制新的内容过来,启动nginx,启动notepad++编辑一个文件...
查看>>
桌面文件自动整理脚本
查看>>
spring cloud 学习(一)初学SpringCloud
查看>>
Collections.shuffle()用法
查看>>
用户体验技术优化系列(一)
查看>>
canvas入门笔记
查看>>